﻿#include "FITKAcousticsNCTPerforated.h"

#include <QDebug>

namespace Acoustics
{

    FITKAcousticsNCTPerforated::~FITKAcousticsNCTPerforated()
    {

    }
    // 获取层叠类型，返回 Perforated 类型
    FITKAcousticsNCTAbstractLayObj::NCTLayUpType FITKAcousticsNCTPerforated::getNCTLayUpType()
    {
        return FITKAcousticsNCTAbstractLayObj::NCTLayUpType::Perforated; // 返回 Perforated 层叠类型
    }

    // 获取单位面积质量（对于 Perforated，返回 0）
    double FITKAcousticsNCTPerforated::getMassPerUnitArea()
    {
        return 0;  // 返回 0，表示没有单位面积质量
    }

    // 获取密度
    double FITKAcousticsNCTPerforated::getDensity()
    {
        return _density;  // 返回材料的密度
    }

    // 设置密度
    void FITKAcousticsNCTPerforated::setDensity(double density)
    {
        _density = density;  // 设置材料的密度
    }

    // 获取流体材料 ID
    int FITKAcousticsNCTPerforated::getfluidMaterialID()
    {
        return _fluidMaterialID;  // 返回流体材料的 ID
    }

    // 设置流体材料 ID
    void FITKAcousticsNCTPerforated::setfluidMaterialID(int id)
    {
        _fluidMaterialID = id;  // 设置流体材料的 ID
    }

    // 获取材料 ID
    int FITKAcousticsNCTPerforated::getMaterialID()
    {
        return _materialID;  // 返回材料的 ID
    }

    // 设置材料 ID
    void FITKAcousticsNCTPerforated::setMaterialID(int id)
    {
        _materialID = id;  // 设置材料的 ID
    }

    // 获取孔隙率
    double FITKAcousticsNCTPerforated::getPorosity()
    {
        return _porosity;  // 返回孔隙率
    }

    // 设置孔隙率
    void FITKAcousticsNCTPerforated::setPorosity(double porosity)
    {
        _porosity = porosity;  // 设置孔隙率
    }

    // 获取孔径半径
    double FITKAcousticsNCTPerforated::getRadius()
    {
        return _radius;  // 返回孔径的半径
    }

    // 设置孔径半径
    void FITKAcousticsNCTPerforated::setRadius(double r)
    {
        _radius = r;  // 设置孔径的半径
    }

    // 获取开孔面积比
    double FITKAcousticsNCTPerforated::getAreaRatio()
    {
        return _areaRatio;  // 返回开孔面积比
    }

    // 设置开孔面积比
    void FITKAcousticsNCTPerforated::setAreaRatio(double aRatio)
    {
        _areaRatio = aRatio;  // 设置开孔面积比
    }

    // 获取流动电阻率
    double FITKAcousticsNCTPerforated::getFlowResistivity()
    {
        return _flowResistivity;  // 返回流动电阻率
    }

    // 设置流动电阻率
    void FITKAcousticsNCTPerforated::setFlowResistivity(double flowR)
    {
        _flowResistivity = flowR;  // 设置流动电阻率
    }

    // 获取固体类型
    Acoustics::FITKAcousticsNCTPerforated::NCTSolidType FITKAcousticsNCTPerforated::getSolidType()
    {
        return _NCTSolidType;  // 返回固体类型
    }

    // 设置固体类型
    void FITKAcousticsNCTPerforated::setSolidType(Acoustics::FITKAcousticsNCTPerforated::NCTSolidType t)
    {
        _NCTSolidType = t;  // 设置固体类型
    }

    // 获取孔洞类型
    FITKAcousticsNCTPerforated::PerforationType FITKAcousticsNCTPerforated::getPerforationType()
    {
        return _perforationType;  // 返回孔洞类型
    }

    // 设置孔洞类型
    void FITKAcousticsNCTPerforated::setPerforationType(FITKAcousticsNCTPerforated::PerforationType t)
    {
        _perforationType = t;  // 设置孔洞类型
    }

    bool FITKAcousticsNCTPerforated::copy(Core::FITKAbstractDataObject *obj)
    {
        //转换强制类型
        Acoustics::FITKAcousticsNCTPerforated* perPtr = dynamic_cast<Acoustics::FITKAcousticsNCTPerforated*>(obj);

        if(nullptr != perPtr)//判断是否转换成功
        {
            //复制成员变量
            _density = perPtr->getDensity();
            _fluidMaterialID = perPtr->getfluidMaterialID();
            _materialID = perPtr->getMaterialID();
            _porosity = perPtr->getPorosity();
            _radius = perPtr->getRadius();
            _areaRatio = perPtr->getAreaRatio();
            _flowResistivity = perPtr->getFlowResistivity();
            _NCTSolidType = perPtr->getSolidType();
            _perforationType = perPtr->getPerforationType();
        }

        // 调用父类的方法
        return Acoustics::FITKAcousticsNCTAbstractLayObj::copy(obj);
    }
}
